// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue';
// 引入element UI
import ElementUI from 'element-ui';
import { Message, MessageBox } from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css';
import App from './App';
// 引入路由
import router from './router';
// 引入状态管理
// import store from './vuex/store';
import store from './store'
// 引入icon
import './assets/icon/iconfont.css'
//
import axios from 'axios';
Vue.prototype.$axios = axios;

// 使用dplayer
// import VueDPlayer from "vue-dplayer";
// import "vue-dplayer/dist/vue-dplayer.css";
// Vue.use(VueDPlayer);
// Vue.config.productionTip = false;


// VideoPlayer
import VideoPlayer from 'vue-video-player'
import 'vue-video-player/src/custom-theme.css'
import 'video.js/dist/video-js.css'
Vue.use(VideoPlayer)

//使用bootstrap
// import 'bootstrap'
import $ from 'jquery'
import 'bootstrap/dist/css/bootstrap.min.css'
import 'bootstrap/dist/js/bootstrap.min.js'



// 添加请求拦截器，在请求头部加token
axios.interceptors.request.use(config => {
  if (localStorage.getItem('Authorization')) {
    console.log("Authorization");
    config.headers.token = localStorage.getItem('Authorization');
  }
  return config;
},
  error => {
    return Promise.reject(error);
  });

// response 拦截器
axios.interceptors.response.use(
  response => {
    /**
     * code为非20000是抛错 可结合自己业务进行修改
     */
    const res = response.data

    if (res.code !== 200) {
      console.log(res);
      Message({
        message: res.message,
        type: 'error',
        duration: 5 * 1000
      })
      console.log("返回值", response);
      // 50008:非法的token; 50012:其他客户端登录了;  50014:Token 过期了;
      if (res.code == 401) {
        console.log(response);
        localStorage.clear()
        // MessageBox.confirm(
        //   '你已被登出，可以取消继续留在该页面，或者重新登录',
        //   '确定登出',
        //   {
        //     confirmButtonText: '重新登录',
        //     cancelButtonText: '取消',
        //     type: 'warning'
        //   }

        // ).then(() => {
        //   store.dispatch('FedLogOut').then(() => {
        //     location.reload() // 为了重新实例化vue-router对象 避免bug

        //   })
        // })
        // this.$message({
        //   message: '登录失效了阿',
        //   type: 'error'
        // })
        // localStorage.clear()
        // this.$router.push({
        //   path: '/login'
        // })
      }

      if (res.code == 500) {
        return response
      }
      return Promise.reject(res.data)
    } else {
      return response
    }
  },
  error => {
    console.log('err' + error) // for debug
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)



// 使用element UI
Vue.use(ElementUI);
// 过滤器
import * as custom from './utils/util'

Object.keys(custom).forEach(key => {
  Vue.filter(key, custom[key])
})

//使用后台参数
require("./mock.js")

// 路由拦截器
// router.beforeEach((to, from, next) => {
//   if (to.matched.length != 0) {
//     if (to.meta.requireAuth) { // 判断该路由是否需要登录权限
//       if (Boolean(localStorage.getItem("userInfo"))) { // 通过vuex state获取当前的user是否存在
//         next();
//       } else {
//         next({
//           path: '/login',
//           query: { redirect: to.fullPath } // 将跳转的路由path作为参数，登录成功后跳转到该路由
//         })
//       }
//     } else {
//       if (Boolean(localStorage.getItem("userInfo"))) { // 判断是否登录
//         if (to.path != "/" && to.path != "/login") { //判断是否要跳到登录界面
//           next();
//         } else {
//           /**
//            * 防刷新，如果登录，修改路由跳转到登录页面，修改路由为登录后的首页
//            */
//           next({
//             path: '/goods/Goods/'
//           })
//         }
//       } else {
//         next();
//       }
//     }
//   } else {
//     next({
//       path: '/login',
//       query: { redirect: to.fullPath } // 将跳转的路由path作为参数，登录成功后跳转到该路由
//     })
//   }
// })

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store, //使用store vuex状态管理
  components: { App },
  template: '<App/>',
  data: {
    // 空的实例放到根组件下，所有的子组件都能调用
    Bus: new Vue()
  }

})
